home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / comm / irc / epic4.lha / doc / local_vars < prev    next >
Text File  |  2002-09-18  |  3KB  |  76 lines

  1. ABOUT LOCAL VARIABLES (The EPIC4 goal)
  2. --------------------------------------
  3. Im just putting down in writing what i think local variables should
  4. be all about.  I intend to make the implementation as close to this
  5. description as possible (obviously).  Feel free to comment on this.
  6.  
  7.  
  8. The scope of a local variable:
  9. ------------------------------
  10. A local variable is any variable that has a predetermined lifetime, and
  11. a scope that is determined syntactically.  This differs from "timed" 
  12. variables that expire when their lifetime is up -- "timed" variables
  13. are accessable from any syntax scope.
  14.  
  15. Generally, the client parses ircII code in a recursive fashion, where
  16. each new scope results in a call to parse_line().  Each call represents
  17. one logical code unit.  When that logical code unit is completed, then
  18. any variables that are local to it are unuseful and should be removed.
  19.  
  20. The tough question of local variables is scoping.  In a true dynamic
  21. scope (much like perl 4), a local variable can be accessed by those
  22. scopes that are desceneded from it call-wise, but not syntax-wise:
  23.  
  24.     alias foo1
  25.     {
  26.         local x
  27.         foo2
  28.     }
  29.  
  30.     alias foo2
  31.     {
  32.         eval echo $x        ; gets the local x from foo1
  33.     }
  34.  
  35. This is almost always a problem, because it then becomes impossible to
  36. determine whether any specific variable reference will yeild a local
  37. variable in a scope earlier in the stack, or will yeild the intended
  38. global variable.  There needs to be a way to "stop" the depth searching
  39. of variables, at which point the searching will go back to the globals.
  40.  
  41. It then appears useful to enumerate a list of "atomic scopes", that is,
  42. scopes that are logically independant of any other scope.  An atomic
  43. scope is loosely defined as any sequence of ircII commands whose precise
  44. execution time and ordering is completely arbitrary and unpredictable.
  45. Usually this is any code whose execution is determined by external events.
  46. As an exmample, the following are the current list of atomic scopes:
  47.  
  48.     ALIAS bodies        (can be called any time)
  49.     ON bodies        (driven by asynchronous events)
  50.     USERHOST -cmd bodies    (driven by asynchronous events)
  51.     WAIT -cmd bodies    (driven by asynchronous events)
  52.     BIND bodies        (driven by asynchronous events)
  53.     TIMER bodies        (driven by asynchronous events)
  54.     QUEUE bodies        (can be called any time)
  55.  
  56. The ircII code executed in one of these contexts is therefore "atomic", and
  57. any local variables that are declared in a scope below it are not accessable.
  58. Any local variables defined in one of these contexts is accessable to
  59. all contexts below it, up to but not including the next atomic context.
  60.  
  61. This allows all the other commands that execute ircII code (IF, WHILE, etc)
  62. to have the ability to declare local variables that are local to THEIR
  63. scope and do not have any effect on any global or local variables in contexts
  64. below them, and such variables will be removed at the end of their context.
  65. But they still retain the ability to access and manipulate local variables
  66. that are in contexts above them, up until the enclosing atomic context.
  67.  
  68.  
  69. The declaration of a local variable:
  70. ------------------------------------
  71. A local variable is declared with the 'local' command (as seen above).
  72. A local variable is accessable throughout its entire lifetime.  You cannot
  73. access a global variable by the same name as a local variable during the
  74. lifetime of the local variable.
  75.  
  76.